package department.fc.service;

import java.sql.SQLException;
import java.util.ArrayList;

import department.fc.dao.DepartmentDAO;
import department.fc.domain.Department;
import department.fc.exception.DuplicatedIDException;
import department.fc.exception.RecordNotFoundException;

public class DepartmentService {

	private DepartmentDAO dao;
	
	private static DepartmentService instance = new DepartmentService();
	
	public static DepartmentService getInstance() {
		return instance;
	}
	//부서등록 메서드 
	public void registerDepartment(Department department) throws SQLException, DuplicatedIDException{
//		1. 부서 아이디가 등록된 아이디인지 체크
//		이 메소드로 넘어온 부서객체의 NUM값으로 DB에서 검색해서 부서 객체가 d에 담기면 그 값이 있는거고 없으면 없는거니까 등록시켜야지 
		Department d = dao.selectDepartmentByNum(department.getDepartmentNum());
//		1-1 등록되지 않은 아이디면 부서 테이블에 insert한다.
		if(d == null){
			dao.insertDepartment(department);
		}else{
			throw new DuplicatedIDException(department.getDepartmentNum()+"은 이미 등록되어 있는 부서번호 입니다.");
		}
	}
	//부서 아이디로 부서 삭제 메소드
	public void removeDepartmentByNum(int departmentNum) throws SQLException, RecordNotFoundException{
//		1. 삭제할 부서가 있는지 조회 
		Department d = dao.selectDepartmentByNum(departmentNum);
		if(d == null){
			throw new RecordNotFoundException("입력하신 "+departmentNum+"은 없는 부서번호 입니다.");
		}
		dao.deleteDepartmentByNum(departmentNum);
	}
//	부서 수정 메소드
	public void modifyDepartmentNum(Department department) throws SQLException, RecordNotFoundException{
//		1. 수정할 부서가 있는지 조회
		int departmentNum = department.getDepartmentNum();
		Department d = dao.selectDepartmentByNum(departmentNum);
		if(d == null){
			throw new RecordNotFoundException("입력하신 "+departmentNum+"부서번호는 존재하지 않습니다.");
		}else{
			dao.updateDepartmentByNum(department);
		}
	}
//	부서 아이디로 부서정보 조회 메서드
	public Department getDepartmentByNum(int departmentNum) throws SQLException {
		return dao.selectDepartmentByNum(departmentNum);
	}
	
//	부서 목록 조회 메서드
	public ArrayList<Department> getDepartmentList() throws SQLException{
		return dao.selectDepartmentList();
	}
	
	public ArrayList<Department> searchDepartmentByLocation(String location) throws SQLException{
		return dao.selectDepartmentByLocation(location);
	}
}
